package cn.wolfcode.luowowo.job;

import cn.wolfcode.luowowo.cache.service.IStrategyDataRedisService;
import cn.wolfcode.luowowo.cache.util.RedisKeys;
import cn.wolfcode.luowowo.cache.vo.StrategyStatisVO;
import cn.wolfcode.luowowo.service.IStrategyService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * Redis 内存数据同步到磁盘
 * 定时器任务
 */
//@Component
public class RedisDataPersistenceJob  {

    @Autowired
    private IStrategyDataRedisService strategyDataRedisService;

    @Autowired
    private IStrategyService strategyService;

    //秒 分 小时 月份中的日期 月份 星期中的日期 年份
    //0  0   0     1/1      *     ?

    /**
     * 需要定时执行的任务方法
     */
    @Scheduled(cron = "10 * * * * ?")
    public void redisDataPersistence(){

        // 1. 获取 Redis 中存储攻略统计数据的 key 的前缀
        String prefix = RedisKeys.STRATEGY_COUNT_DATA_VO.getPrefix() + ":*";

        // 2. 获取 Redis 中存储的所有攻略统计 vo 对象
        List<StrategyStatisVO> voList = strategyDataRedisService.getStatisVoObject(prefix);

        // 3. 判断返回的 voList 中是否有值,没有则表示没有需要同步到数据库的数据
        if(voList.size() > 0){
            for (StrategyStatisVO vo : voList) {
                strategyService.updateStatisVo(vo);
            }
        }

    }
}
